package com.suray.system.run.data.mysql.analyze;

import com.suray.commin.core.utils.SpringContextHolder;
import com.suray.system.run.data.mysql.device.entity.ExecTaskDB;
import com.suray.system.run.data.mysql.device.task.ExecTaskDBServiceImpl;
import com.suray.system.run.type.DeviceType;
import com.suray.wcs.service.enums.TaskType;

import java.util.Date;

public class ExecTaskDataStore {
    private ExecTaskDBServiceImpl execTaskDBService = SpringContextHolder.getBean(ExecTaskDBServiceImpl.class);

    /**
     * 设备序列号
     */
    private String series;

    /**
     * 当前任务表
     */
    private ExecTaskDB execTaskDB;

    /**
     * 设备类型
     */
    private DeviceType deviceType;

    public ExecTaskDataStore(String series, DeviceType deviceType) {
        this.series = series;
        this.deviceType = deviceType;
    }

    /**
     * 查找当前执行的任务
     * @return
     */
    public ExecTaskDB findExecTaskData() {
        execTaskDB = execTaskDBService.findExecTask(series);
        return execTaskDB;
    }

    /**
     * 创建当前小车执行的任务
     * @return
     */
    public ExecTaskDB createExecTaskData() {
        execTaskDB = new ExecTaskDB();
        execTaskDB.setSeries(series);
        execTaskDB.setDeviceType(deviceType);
        execTaskDBService.save(execTaskDB);
        return execTaskDB;
    }

    /**
     * 更新当前小车执行的任务
     * @return
     */
    public boolean updateExecTaskData() {
        return execTaskDBService.updateById(execTaskDB);
    }

    /**
     * 获取入库任务数量
     * @param startTime
     * @param endTime
     * @return
     */
    public int getDeviceInCargoTaskNum(Date startTime, Date endTime) {
        return execTaskDBService.getDeviceTaskNum(series, TaskType.IN, startTime, endTime);
    }

    /**
     * 获取出库任务数量
     * @param startTime
     * @param endTime
     * @return
     */
    public int getDeviceOutCargoTaskNum(Date startTime, Date endTime) {
        return execTaskDBService.getDeviceTaskNum(series, TaskType.OUT, startTime, endTime);
    }

    /**
     * 获取移库任务数量
     * @param startTime
     * @param endTime
     * @return
     */
    public int getDeviceTransCargoTaskNum(Date startTime, Date endTime) {
        return execTaskDBService.getDeviceTaskNum(series, TaskType.TRANSFER, startTime, endTime);
    }

    public int getDeviceTaskNum() {
        return execTaskDBService.getDeviceTaskNum(series, null, null, null);
    }
}
